#ifndef __LOG_INTERFACE_HPP__
#define __LOG_INTERFACE_HPP__
#include "type_define.hpp"

const LIBVERSION  log_libversion = MAKEVERSION(2, 0, 0, 0);

enum ELogLevel
{
    LOG_LEVEL_NONE = 0x0000,
    LOG_LEVEL_DBG  = 0x0001,
    LOG_LEVEL_INF  = (0x0001<< 1),
    LOG_LEVEL_WRN  = (0x0001<< 2),
    LOG_LEVEL_CRI  = (0x0001<< 3)

};

class IFileLog
{
public:
    virtual void OpenLevel(ELogLevel eLogLV) = 0;
    virtual void CloseLevel(ELogLevel eLogLV) = 0;
    virtual bool IsLevelOpen(ELogLevel eLogLV) = 0;
    virtual void Flush(void) = 0;
    virtual bool LogCri(const char* szFormat, ...) = 0;
    virtual bool LogWrn(const char* szFormat, ...) = 0;
    virtual bool LogInf(const char* szFormat, ...) = 0;
    virtual bool LogDbg(const char* szFormat, ...) = 0;

    virtual void Release(void) = 0;
};

class INetLog
{
public:
};

class IShareMemoryLog
{
public:
};

IFileLog* CreateFileLog(const char* pszDir, const char* pszFileName = "", LIBVERSION libversion = log_libversion);

typedef IFileLog* (*pfn_CreateFileLog)(const char* pszDir, const char* pszFileName, LIBVERSION libversion);

#endif